﻿#ifndef _NET_SERVER_H
#define _NET_SERVER_H

#include <mutex>
#include <queue>
#include <string>
#include <thread>
#include <vector>

using namespace std;

//
// 自研网络服务器
//
namespace nets {

    class NetServer {

    public:
        //
        // @brief 创建套接字
        // @param 端口
        //
        int create_socket(int);

        //
        // 监听
        //
        void get_listen(int);

        // 接受连接的逻辑
        // 这里可以使用 accept() 函数来接受客户端连接
        // 并处理相应的逻辑
        void accept_connection(int);

        //
        // 接收数据
        // 这里可以使用 recv() 函数来接收客户端发送的数据
        void receive(int);

        void close_socket(int);

        // @prief 加载模板
        void load_template();

    private:
        string STATUS_200;
        string STATUS_404;

        //
        // 互斥锁用于保护共享资源
        //
        mutex mtx;

        //
        // 客户端套接字队列
        // 这里使用的是整数类型，实际应用中可能需要使用更复杂的类型来处理套接字
        queue<int> clients;

        // 条件变量用于线程间同步
        condition_variable cv;

        //
        // 返回客户端请求
        void response(int, const char *);

        // 遍历客户端
        void worker();
    };
}

#endif // !_NET_SERVER_H
